# 程序要创建大量(可能上百万) 的对象，导致占用很大的内存。
# 对于主要是用来当成简单的数据结构的类而言，你可以通过给类添加 __slots__ 属性来极大的减少实例所占的内存。
# 使用__slots__ 一个不好的地方就是我们不能再给实例添加新的属性了，只能使用在__slots__中定义的那些属性名。
# 定义了 __slots__ 后的类不再支持一些普通类特性了，比如多继承。
# 大多数情况下，你应该只在那些经常被使用到的用作数据结构的类上定义 __slots__ (比如在程序中需要创建某个类的几百万个实例对象)。

# 关于 __slots__ 的一个常见误区是它可以作为一个封装工具来防止用户给实例增加新的属性。
# 尽管使用 __slots__ 可以达到这样的目的，但是这个并不是它的初衷。__slots__ 更多的是用来作为一个内存优化工具。

class Date:
    __slots__ = ['year', 'month', 'day']
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day
